/* 
 * File:   InterpolacionLagrange.h
 * Author: Gina Ceron
 *
 * Created on 10 de septiembre de 2011, 11:29 PM
 */

#ifndef INTERPOLACIONLAGRANGE_H
#define	INTERPOLACIONLAGRANGE_H
#include "librerias/Polinomio.h"
#include <string>


class InterpolacionLagrange
{
    public:
        InterpolacionLagrange();
        InterpolacionLagrange(int entrada, int nrandom, int ano, int ajuste, int ajusteRandom);
        virtual ~InterpolacionLagrange();
        void leerArchivo();
        void escogerDatosInter(bool opcion);
        void setDatos(double x[], double y[], int entrada);
        void setSeleccion(double xSel[], double ySel[], int ajuste, bool flags[]);
        void ordenarDatosAInterpolar();
        void calcularCoeficientesNewton();
//        void calcularCoeficientesLagrange();
        void calcularPolyNewton();
        void calcularPolyLagrange();
        void evaluarDatos();
        void escribirResultado1();
        void escribirResultado2();
        void inicializarDatosAleatorios();
        void setDatosAleatorios(double xrand[],double yrand[], int tamAleat);
        Polinomio  getPoly(const char*  tipoPoly);
        void construirError();
        
    private:
        
        int tam_entrada; //Numero de lineas a leer
        int tam_aleatorios; //Numero de datos aleatorios para la interpolación
        int ano; //Año a analizar.
        int tam_ajusteRandom; //De que tamaño serán ajustados los datos aleatorios
        int tam_ajuste; // Tamaño de datos a usar para ajustar el polinomio
        double * array_datosX; //Valores de X leidos del archivo
        double * array_datosY; //Valores de Y leidos del archivo
        double * array_xRandom; //Valores de X generados aleatoriamente
        double * array_fdrand; //Valores de Y resultantes de la evaluación de la función
        double * array_xSelect;//Valores seleccionados para la interpolación
        double * array_ySelect;//Valores seleccionados para la interpolación
        double * array_interpLgrng; //Valores obtenidos por la interpolación Lagrange
        double * array_interpNewtn; ////Valores obtenidos por la interpolación Newton
        double * array_errorNewtn;////Valores de error por la interpolación Newton
        double * array_errorLagrng;////Valores de error por la interpolación Lagrang
        double * array_coefBNewto; //Array de coef de diferencias
        Polinomio * array_polysLagrng; //Array de coef de lagrange
        Polinomio obj_polyLagrng, obj_polyNewtn; //Polinomios De lagrange y Newton Obtenidos
        Polinomio obj_polyErrorLagrng, obj_polyErrorNewtn; //Polinomios De error Lagrange y Newton Obtenidos
        bool * flags; //Flags para indicar si un dato fue seleccionado
        bool tipoCalculo; //Indica si el punto a trabajar es el primero o el segundo mediante la palabra "false" para el primero, "true" para el  segundo.

};

#endif	/* INTERPOLACIONLAGRANGE_H */

